package com.hucsmn.stumansys.service;

import com.hucsmn.stumansys.entity.Student;
import com.hucsmn.stumansys.service.impl.StudentServiceImpl;

import java.util.List;

/**
 * 学生信息相关业务逻辑。
 * @author hucsmn
 */
public interface StudentService {
    /**
     * 获取 StudentService 实现类的实例对象。
     * @return StudentService 实例。
     */
    static StudentService getInstance() {
        return new StudentServiceImpl();
    }

    /**
     * 添加学生信息记录，成功则设置 ID。
     * @param student 学生信息。
     * @return 是否成功。
     */
    boolean add(Student student);

    /**
     * 删除单条学生信息记录。
     * @param id 学生信息 ID。
     * @return 是否成功。
     */
    boolean remove(int id);

    /**
     * 删除多条学生信息记录。
     * @param ids 学生信息 ID 列表。
     * @return 是否成功。
     */
    boolean remove(int... ids);

    /**
     * 通过 ID 查找并修改一条学生信息记录。
     * @param student 学生信息。
     * @return 是否成功。
     */
    boolean modify(Student student);

    /**
     * 通过 ID 查找学生信息。
     * @param id 学生信息 ID。
     * @return 成功返回学生信息，失败返回 null。
     */
    Student findById(int id);

    /**
     * 通过卡号查找学生信息。
     * @param card 学生卡号。
     * @return 成功返回学生信息，失败返回 null。
     */
    Student findByCard(String card);

    /**
     * 返回符合条件的学生信息记录条目总数。
     * @param contains 学生姓名包含字符串，为空时不限制该条件。
     * @return 成功返回非负数，失败返回 -1。
     */
    long count(String contains);

    /**
     * 获取符合条件的学生信息列表分页结果。
     * @param contains 学生姓名包含字符串，为空时不限制该条件。
     * @param page 页数，从 1 开始计数。
     * @param limit 每页数据上限。取值大于 0，否则默认为 1。
     * @return 成功返回按照 ID 升序排列的学生信息列表，失败返回 null。
     */
    List<Student> list(String contains, int page, int limit);
}
